#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021-01-24
# @Author: Sunny
# ========================

#没有元祖推导式，只会返回生成器generator
tu = (i for i in range(10))
print(tu)

"""
可迭代对象：能够使用for循环遍历的，都叫可迭代对象 如：str() list() tuple() dict()
    迭代对象内部实现了迭代协议(对象定义了__iter__这个方法)
    
迭代器: 迭代器也是可迭代对象的一种
    迭代器不仅仅实现了__iter__方法，还实现了__next__方法
    1.所有的迭代对象都可以转换为迭代器: 迭代器 = iter(可迭代对象)
    
    2.迭代器可以使用内置函数next进行迭代
    3.迭代器的作用：在大批量取存储数据的时候，迭代器可以帮我们节约内存
        eg ：当存储一个列表，列表数据有10万，那么内存会很大，但是生成迭代器，打印出迭代器只是一个对象，
            取数时只需通过next()依次取数即可

"""



#1.将迭代对象转换为迭代器
list1 = [11,22,33,44]
list1_tor = iter(list1)
print(list1_tor)

#2.next函数，可以对迭代器进行迭代，依次取数
print(next(list1_tor))
print(next(list1_tor))
print(next(list1_tor))
print('*'*50)
#当使用next迭代后，迭代器里面的数据会依次减少(目前只剩下44一组数据)
#当使用next获取完迭代器中所有的元素之后，再次使用next进行迭代，会抛出迭代器停止的异常
for i in list1_tor:
    print(i)


#3.迭代器的作用
# list2 = list(range(10000))
# list2_tor = iter(range(10000))


